import axios from 'axios'
// import qs from 'qs'
import {Toast} from 'vant'
import router from '@/router/index'
import store from '@/store/index'
// import signMd5Utils from '@/utils/sign'


let url = process.env.VUE_APP_Verison+"/quest-api";//生产
if (process.env.NODE_ENV === "development") {
  url = "/apis/quest-api" //开发
}
const toLogin = () => {
    router.push({
        path: '/login',
        query: {
            redirect: router.currentRoute.fullPath
        }
    })
};

const api = axios.create({
    baseURL:url,
    timeout: 30000,
    responseType: 'json',
    withCredentials: false,
    headers: {
      'Content-Type': 'application/json',
    }
});
// api.defaults.headers.common["client_id"]="webApp"
// api.defaults.headers.common["client_secret"]="webApp"
// api.defaults.headers.post['Content-Type'] =
//   'application/x-www-form-urlencoded;charset=UTF-8'
api.interceptors.request.use(
    request => {
        /**
         * 全局拦截请求发送前提交的参数
         * 以下代码为示例，在登录状态下，分别对 post 和 get 请求加上 token 参数
         */
        request.headers.Authorization = "";
      if (sessionStorage.getItem("backLoginToken")) {

        request.headers.Authorization = "Bearer " + sessionStorage.getItem("backLoginToken");
      }

        if (store.getters['user/isLogin']) {
            request.headers.token = store.state.user.token
        }
        return request
    }
);


api.interceptors.response.use(
    async response => {
        /**
         * 全局拦截请求发送后返回的数据，如果数据有报错则在这做全局的错误提示
         * 假设返回数据格式为：{"code":500,"msg":"邮箱地址不正确","data":null}
         * 规则是当 code 为 200 时表示请求成功，500 发生错误
         * 为 401 时表示接口需要登录或者登录状态失效，需要重新登录
         * 请求出错时 msg 会返回错误信息
         * 则代码如下
         */
        response.headers.Access="Access-Control-Allow-Origin"
        let errCodes = [500, 405, 403];
        const res = response.data;

        if (res.code === 200) {
            return Promise.resolve(res)
        } else if (errCodes.includes(res.code)) {
            // 这里做错误提示，如果使用了 element ui 则可以使用 Message 进行提示
            Message({
                message: res.msg || 'Error',
                type: 'error',
                duration: 5 * 1000
            });
            return Promise.reject(res)
        } else if (res.code === 401) {

            // 有一个接口进入该方法 其他接口则不在进入
            let reLogin = store.getters['global/isReLogin'];
            if (!reLogin) {
                store.dispatch('global/loginExpired', true).then(() => {
                    // to re-login
                    MessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', {
                        confirmButtonText: '重新登录',
                        cancelButtonText: '取消',
                        type: 'warning'
                    }).then(() => {
                        toLogin();
                      sessionStorage.removeItem("token");
                      sessionStorage.removeItem("userInfo");
                      sessionStorage.removeItem("backLoginToken");
                      // if (router.app._route.path.includes('peoLifeManage')) {
                      router.push("/login");
                        // 重置状态
                        this.$store.dispatch('global/loginExpired', false).then(() => {
                        })
                    }).catch(() => {

                    })
                })
            }
            return Promise.reject(res)
        }
        return Promise.resolve(res)
    },
    error => {

      if(error.response){
        Toast({
          message: error.response.data.msg,
          type: 'error',
          duration: 3000
        })
      }else{
        Toast({
          message: '服务开小差了，请稍后再试',
          type: 'error',
          duration: 3000
        })
      }

      //
      // sessionStorage.removeItem("token");
      // sessionStorage.removeItem("userInfo");    toLogin()

        return Promise.reject(error)
    }
);

export default api
